package app

import (
	"github.com/gin-gonic/gin"
	"net/http"
	"web/pkg/e"
)

type Response struct {
	Code    int         `json:"code"`
	Message string      `json:"message"`
	Data    interface{} `json:"data,omitempty"`
	Error   interface{} `json:"error,omitempty"`
	Links   interface{} `json:"links,omitempty"`
	Meta    interface{} `json:"meta,omitempty"`
}

// Success 全局成功响应函数
func Success(c *gin.Context, data interface{}, pagination ...interface{}) {
	resp := Response{
		Code:    e.SUCCESS,
		Message: e.GetMsg(e.SUCCESS),
		Data:    data,
	}

	if len(pagination) == 2 {
		resp.Links = pagination[0]
		resp.Meta = pagination[1]
	}
	c.JSON(http.StatusOK, resp)
}

// Json 全局JSON响应函数，直接返回原始数据（不包装）
// 返回: {"id":1,"name":"test"}
func Json(c *gin.Context, data interface{}) {
	c.JSON(http.StatusOK, data)
}

// Fail 全局失败响应函数
func Fail(c *gin.Context, errCode int, err interface{}) {
	c.JSON(http.StatusInternalServerError, Response{
		Code:    errCode,
		Message: e.GetMsg(errCode),
		Error:   err,
	})
}

// Error 全局错误响应函数
func Error(c *gin.Context, err interface{}) {
	Fail(c, e.ERROR, err)
}
